<?php

namespace app\common\service;

use think\facade\Db;
use think\facade\Log;

class Ele
{
    private $appkey;
    private $secretKey;
    private $sessionKey;
    private $error = '';

    public function __construct($agentId)
    {
        $api = Db::name('alimama')
            ->where('agent_id', $agentId)
            ->find();
        if (empty($api)) {
            throw new \think\Exception('淘宝联盟账号未配置');
        }
        if (empty($api['session_key'])) {
            throw new \think\Exception('淘宝联盟账号未授权');
        }
        if ($api['auth_expire_time'] < time()) {
            throw new \think\Exception('淘宝联盟账号授权已过期，请及时更新');
        }

        try {
            $this->appkey = env('taobao.client_id');
            $this->secretKey = env('taobao.client_secret');
            $this->sessionKey = $api['session_key'];
        } catch (\Exception $e) {
            throw new \think\Exception($e->getMessage());
        }
    }

    /**
     * 淘宝客-推广者-官方活动转链
     */
    public function activity_info_get_old($SubPid, $MaterialId)
    {
        $root = app()->getRootPath();
        include_once $root . "extend/alimama/TopSdk.php";
        $c = new \TopClient;
        $c->appkey = $this->appkey;
        $c->secretKey = $this->secretKey;

        $pid_arr = explode("_", $SubPid);
        $AdzoneId = $pid_arr[3];

        $req = new \TbkActivityInfoGetRequest;
        $req->setAdzoneId($AdzoneId); //mm_xxx_xxx_xxx的第三位
        $req->setSubPid($SubPid); //mm_xxx_xxx_xxx 仅三方分成场景使用
        $req->setActivityMaterialId($MaterialId); //官方活动会场ID，从淘宝客后台“我要推广-活动推广”中获取
        $resp = $c->execute($req);
        $jsonStr = json_encode($resp);
        $jsonArray = json_decode($jsonStr, true);
        return $jsonArray['data'] ?? [];
    }

    /**
     * taobao.tbk.sc.jutuike.info.get (淘宝客-服务商-官方活动转链)
     * @link https://developer.alibaba.com/docs/api.htm?spm=a219a.7395905.0.0.63f275fejQmACW&apiId=48417
     */
    public function activity_info_get($SubPid, $MaterialId)
    {
        if (empty($this->sessionKey)) {
            $this->error = '淘宝账号尚未授权';
            return false;
        }

        $root = app()->getRootPath();
        include_once $root . "extend/alimama/TopSdk.php";
        $c = new \TopClient;
        $c->appkey = $this->appkey;
        $c->secretKey = $this->secretKey;

        $pid_arr = explode("_", $SubPid);
        $siteId = $pid_arr[2];
        $AdzoneId = $pid_arr[3];

        $req = new \TbkScActivityInfoGetRequest;

        $req->setAdzoneId($AdzoneId);
        $req->setSiteId($siteId);
        $req->setRelationId("2844685722");
        Log::info('成功设置');
        $req->setActivityMaterialId($MaterialId);
        $req->setUnionId("demo");
        $resp = $c->execute($req, $this->sessionKey);
        $jsonStr = json_encode($resp);
        $jsonArray = json_decode($jsonStr, true);
        return $jsonArray;
    }

    /**
     * 接口文档：https://open.taobao.com/api.htm?docId=43328&docType=2&scopeId=16175
     *
     * taobao.tbk.order.details.get( 淘宝客-推广者-所有订单查询 )
     */
    public function orderlist($params)
    {
        $root = app()->getRootPath();
        include_once $root . "extend/alimama/TopSdk.php";
        $c = new \TopClient;
        $c->appkey = $this->appkey;
        $c->secretKey = $this->secretKey;
        $req = new \TbkOrderDetailsGetRequest;
        $req->setQueryType("1");    // 查询时间类型，1：按照订单淘客创建时间查询，2:按照订单淘客付款时间查询，3:按照订单淘客结算时间查询
        $req->setPositionIndex("2222_334666");  // 位点，除第一页之外，都需要传递；前端原样返回。
        $req->setPageSize($params['limit'] ?? "100");    // 页大小，1~100
        $req->setMemberType("2");   // 推广者角色类型,2:二方，3:三方，不传，表示所有角色
        // $req->setTkStatus("12");    // 淘客订单状态，12-付款，13-关闭，14-确认收货，3-结算成功;不传，表示所有状态

        // 订单查询结束时间，订单开始时间至订单结束时间，中间时间段日常要求不超过3个小时，
        // 但如618、双11、年货节等大促期间预估时间段不可超过20分钟，
        // 超过会提示错误，调用时请务必注意时间段的选择，以保证亲能正常调用！
        $req->setEndTime(date('Y-m-d H:i:s', $params['endTime']));
        $req->setStartTime(date('Y-m-d H:i:s', $params['startTime']));
        $req->setJumpType("1");
        $req->setPageNo($params['page'] ?? "1");
        $req->setOrderScene("1");
        $resp = $c->execute($req);
        $resp = json_encode($resp, JSON_FORCE_OBJECT);
        $resp = json_decode($resp, true);
        return $resp;
    }

    /**
     * taobao.tbk.sc.order.details.get (淘宝客-服务商-所有订单查询)
     * @link https://developer.alibaba.com/docs/api.htm?spm=a219a.7395905.0.0.43bc75feWSmSbF&apiId=43755
     */
    public function scOrderList($params)
    {
        $root = app()->getRootPath();
        include_once $root . "extend/alimama/TopSdk.php";
        $c = new \TopClient;

        // 服务商 appkey、secretKey
        $c->appkey = $this->appkey;
        $c->secretKey = $this->secretKey;

        $req = new \TbkScOrderDetailsGetRequest;
        $req->setQueryType('1');    // 查询时间类型，1：按照订单淘客创建时间查询，2:按照订单淘客付款时间查询，3:按照订单淘客结算时间查询
        $req->setPositionIndex("2222_334666");  // 位点，除第一页之外，都需要传递；前端原样返回。
        $req->setPageSize($params['limit'] ?? "100");    // 页大小，1~100
        $req->setMemberType("2");   // 推广者角色类型,2:二方，3:三方，不传，表示所有角色
        // $req->setTkStatus("12");    // 淘客订单状态，12-付款，13-关闭，14-确认收货，3-结算成功;不传，表示所有状态

        // 订单查询结束时间，订单开始时间至订单结束时间，中间时间段日常要求不超过3个小时，
        // 但如618、双11、年货节等大促期间预估时间段不可超过20分钟，
        // 超过会提示错误，调用时请务必注意时间段的选择，以保证亲能正常调用！
        $req->setEndTime(date('Y-m-d H:i:s', $params['endTime']));
        $req->setStartTime(date('Y-m-d H:i:s', $params['startTime']));
        $req->setJumpType("1");
        $req->setPageNo($params['page'] ?? "1");
        $req->setOrderScene("1");
        $resp = $c->execute($req, $this->sessionKey);
        $resp = json_encode($resp, JSON_FORCE_OBJECT);
        $resp = json_decode($resp, true);
        return $resp;
    }

    public function getError()
    {
        return $this->error;
    }
}
